package com.meixiang.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.meixiang.R;
import com.meixiang.util.AbStrUtil;
import com.meixiang.util.DensityUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 星星布局
 */
public class StarLayout extends LinearLayoutCompat {
    private int starNumber=0;
    private Context mContext;
    private int resId= R.mipmap.star;
    private List<ImageView> mViewList;
    //星星的模式
    private int STAR_MODEL; //默认展示模式
    public static final int MODEL_SHOW=0; //展示模式(不显示灰色星星)，该模式不可点击，用于展示评分。
    public static final int MODEL_SHOW_All=1; //展示模式(显示灰色星星)，该模式不可点击，用于展示评分。
    public static final int MODEL_EDIT=2; //编辑模式，该模式可点击设置星星数量，用于评分时。
    private IStarOnclick mStarOnclick;
    private String startText;//星星等级文字
    public StarLayout(Context context) {
        this(context,null);
    }

    public StarLayout(Context context, AttributeSet attrs) {
        this(context, attrs,MODEL_SHOW);
    }

    /**
     * 星星点击回调监听。返回星星数量
     * @param mStarOnclick
     */
    public void starOnclickListener(IStarOnclick mStarOnclick){
        this.mStarOnclick=mStarOnclick;
    }
    public StarLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContext=context;
        setOrientation(HORIZONTAL);
        setGravity(Gravity.CENTER);
        initView(attrs,defStyleAttr);
    }
    private void initView(AttributeSet attrs, int defStyleAttr){
        TypedArray array=mContext.obtainStyledAttributes(attrs,R.styleable.StarLayout,defStyleAttr,0);
        starNumber=array.getInteger(R.styleable.StarLayout_star_number,0);
        resId=array.getResourceId(R.styleable.StarLayout_star_img,R.mipmap.star);
        STAR_MODEL=array.getInt(R.styleable.StarLayout_star_model,MODEL_SHOW);
        mViewList=new ArrayList<>();
        initData();
    }

    /**
     * 设置显示星星数量
     * @param starNumber
     */
    public void setStarNumber(String starNumber){
        if (starNumber==null||starNumber.equals("")){
            starNumber="0";
        }
        this.starNumber=Math.round(Float.parseFloat(starNumber));
        //setData();

        if (this.starNumber<=mViewList.size()){

            if (STAR_MODEL==MODEL_EDIT||STAR_MODEL==MODEL_SHOW_All){

                for (int i=0;i<mViewList.size();i++){
                    if (i<this.starNumber){
                        mViewList.get(i).setImageResource(R.mipmap.star);
                    }else{
                        mViewList.get(i).setImageResource(R.mipmap.star_gray);
                    }

                }
            }else if (STAR_MODEL==MODEL_SHOW){
                for (int i=mViewList.size()-1;i>=this.starNumber;i--){
                    mViewList.remove(i);
                    removeViewAt(i);
                }
                for (int i=0;i<mViewList.size();i++){
                    mViewList.get(i).setImageResource(R.mipmap.star);
                }

            }
        }

    }

    /**
     * 设置星星图片
     * @param
     *//*
    public void setStarImg(int resId){
        this.resId=resId;
        setData();
    }*/

    /**
     * MODEL_SHOW; //展示模式
     * MODEL_SHOW_ALL; //展示模式(显示灰色)
     * MODEL_EDIT; //编辑模式
     * @param model
     */
    public void setStarModel(int model){
        STAR_MODEL=model;
        initData();
    }
    public void setStartText(String text){
        this.startText=text;
        initData();
    }
    private void initData(){
        removeAllViews();
        mViewList.clear();
        /**
         * 初始化展示模式星星
         */
        if (STAR_MODEL==MODEL_SHOW){
            resId=R.mipmap.star;
            for (int i=0;i<starNumber;i++){
                ImageView iv=new ImageView(mContext);
                LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                iv.setLayoutParams(params);
                iv.setImageResource(resId);
                iv.setPadding(0,0, DensityUtil.dip2px(mContext,8),0);
                addView(iv);
                mViewList.add(iv);
            }
            //初始化编辑模式的星星
        }else if (STAR_MODEL==MODEL_EDIT||STAR_MODEL==MODEL_SHOW_All){

            for (int i=0;i<5;i++){
                if (i<starNumber){
                    resId=R.mipmap.star;
                }else{
                    resId=R.mipmap.star_gray;
                }
                ImageView iv=new ImageView(mContext);
                LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                iv.setPadding(0,0, DensityUtil.dip2px(mContext,8),0);
                iv.setLayoutParams(params);
                iv.setImageResource(resId);
                if (STAR_MODEL==MODEL_EDIT){
                    final int finalI = i+1;
                    iv.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            setStarNumber(finalI+"");
                            Log.e("number",finalI+"");
                            if (mStarOnclick!=null){
                                mStarOnclick.starNumber(finalI);
                            }
                        }
                    });
                }
                addView(iv);
                mViewList.add(iv);
            }
        }
        if (!AbStrUtil.isEmpty(startText)){
            TextView text=new TextView(mContext);
            text.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
            text.setTextColor(ContextCompat.getColor(mContext, R.color.service_yellow));
            text.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
            text.setText(startText);
            text.setPadding(DensityUtil.dip2px(mContext,4),0,0,0);
            addView(text);
        }
    }
    public interface IStarOnclick{
        void starNumber(int number);
    }
}
